草庐IT

Java HotSpot 枚举开销

全部标签

通用类型的 Java 枚举

我想为IBatis创建一个通用的基于枚举的映射器。我正在使用以下代码执行此操作。这确实有编译时错误,我不知道如何修复。也许我的解决方案完全错误(请记住IBatis的使用),在这种情况下请提出更好的建议。感谢任何帮助。我想要实现的是将后续映射器定义为:publicclassXEnumTypeHandlerextendsCommonEnumTypeHandler{}当前代码:publicclassCommonEnumTypeHandlerimplementsTypeHandlerCallback{publicvoidsetParameter(ParameterSetterps,Object

java - Java 枚举可以有多个构造函数吗?

我知道我可以像这样创建一个枚举:publicenumMyEnum{ONE(1),TWO(2);privateintvalue;privateMyEnum(intvalue){this.value=value);}publicintgetValue(){returnvalue;}}但是我有一些问题:1)枚举值似乎是在开始时声明的。是否有特定格式。我可以在任何地方申报吗?2)是否可以声明一个具有多个构造函数的枚举,这是人们有时会做的事情吗? 最佳答案 publicenumMyEnum{ONE(1),TWO(1,2);privateint

java - 枚举<?扩展界面>

我正在尝试拥有一组扩展通用接口(interface)的枚举,例如:interfaceFooable{voidsomeCommonMethod();}enumE1implementsFooable{//someenumuerationsandadefinitionforsomeCommonMethod()}enumE2implementsFooable{//somedifferentenumerationsandadifferentdefinitionforsomeCommonMethod()}然后通过强制变量是枚举和实现接口(interface)来在别处使用它。所以类似的东西.....

c++ - 确保覆盖 map 中的所有枚举值

假设我有以下内容:#includeenumclassThing{Zero,One,Two};classMetadata{};std::mapextra_info;voidfoo(){extra_info[Thing::Zero]=Metadata();extra_info[Thing::One]=Metadata();extra_info[Thing::Two]=Metadata();}如果添加了新标签,如Thing::三.我考虑总是在末尾有一个标签,LastTag,然后从0迭代到LastTag-2并验证这些键是否存在在map上,但这看起来很笨拙。在编译时完成此操作的方法最好,但我认为

c++ - 错误实现的强类型枚举的语法?

我目前正在测试VisualStudio2012的11月CTP,遇到了一个有趣的问题:强类型枚举的标准是否强制要求enum和struct/class关键字必须在同一行中,还是应该向Microsoft报告实现中的错误?编译:enumstructname:type{...这不是(C2332)enumstructname:type{...编辑:正如James所说,这是实现中的一个错误,并已报告给Microsoft 最佳答案 是的,这无疑是一个错误。预处理后换行符不重要。这由MicrosoftConnect上的以下问题跟踪(致OP:感谢您打开

c# - 使相应的 native 和托管枚举保持同步的技术

我有一个native库的管理器包装器——native库是具有导出C接口(interface)的C++,我在托管端使用P/Invoke来实现互操作。我可以控制托管代码和native代码。native代码中有一个枚举,在托管代码中有相应的枚举,如下所示://C#publicenumErrorCode{None=0,General=1,BadThings=2,HardDriveWasRemoved=3,}//C++enumERROR_CODE{ERROR_CODE_NONE=0,ERROR_CODE_GENERAL=1,ERROR_CODE_BAD_THINGS=2,ERROR_CODE_H

c++ - 我应该如何计算我的枚举?

通常,当我创建一个枚举时,它们每个都会递增1,请参阅enum{A=0,B,C,D};但是在我查看了一些源代码之后,我看到有人在做这样的事情enum{A=0,B=1我明白这意味着什么,但这到底给我带来了什么?有什么优势吗?在我看来,我只看到这使它看起来不必要的复杂。 最佳答案 第二种形式创建用于位掩码的标志。通常这样做是为了在具有多个控制其行为的bool条件的对象中节省空间。structfoo{std::uint32_tbitmask;//upto32differentflags.};fooobj;obj.bitmask=(B|D);

c++ - C/C++ 枚举和 char * 数组

在一篇文章中浏览了以下代码,并不认为它是char*数组的标准C/C++语法。作为测试,VisualC++(visualstudio2005)和C++BuilderRadXE都拒绝了第二行。在不使用#define的情况下,任何人都有任何技巧/技巧可以在不诉诸STL的情况下保持enum和字符串数组同步吗?更多的是好奇问题。enumTCOLOR{RED,GREEN,BLUE};char*TNCOLOR[]={[RED]="Red",[GREEN]="Green",[BLUE]="Blue"};顺便说一句,这篇文章出自很老,我相信这可能在GCC下有效,但尚未测试。

c++ - 多态 C 风格的转换有任何开销吗?

将派生类实例的指针强制转换为实例基类在C++中是否有任何运行时开销,还是在编译时解决?如果有的话,在转换操作中究竟需要计算什么?例子:classFoo;classBar:publicFoo;Bar*y=newBar;Foo*x=(Foo*)y;(我知道我应该使用C++风格的强制转换,而且答案可能与它们相同) 最佳答案 是的,虽然可以忽略不计。在这种情况下,C风格转换被解释为static_cast,这可能会导致指针调整。structBase{};structDerived:Base{virtual~Derived();}//note:

c++ - 枚举值 (int) 到类型的动态映射

看来这个问题在我们的工作中很常见。我们通过网络发送一个int或enum值,然后我们收到它,我们想创建/调用一个特定的对象/函数。最简单的解决方案是使用switch语句,如下所示:switch(value){caseFANCY_TYPE_VALUE:returnnewFancyType();}它工作正常,但我们会有很多这样的开关block,当我们创建新的值和类型时,我们需要更改所有这些。这似乎是对的。其他可能性是使用模板。但我们不能,因为枚举的值是在运行时定义的。是否有任何正确的设计模式或任何正确的方法?这似乎是每天编码中一个非常普遍和普遍的问题......